/*
 * Version 0.1
 *      Herstellen der Grundfunktionalitaet.
 *      Klasse ungeprueft!!!
 */
package ueb13.uebOrder;

import ueb13.htw.queue.PriorityQueue;
import ueb13.htw.queue.Queue;

/**
 * Nutzt die Queue zum verwalten von Order-Objekten
 * 
 * @author Andreas Dier, Steffen Schuhmann
 * @version a0.1
 */
public class OrderManagment {
    
    Queue queue = null;
    /**
     * Legt eine Orderqueue mit Standartgroesse an.
     */
    public OrderManagment() {
        queue = new Queue(); 
    }
    
    /**
     * Legt eine Orderqueue mit der groesse von size an.
     * 
     * @param size Die groesse der Queue
     */
    public OrderManagment(int size) {
        queue = new Queue(size);
    }
    
    /**
     * Fuegt ein Element an das Ende der Queue an.
     * 
     * @param element Das anzufuegende Element. 
     */
    public void add(Order element) {
        if(element == null)
            throw new NullPointerException();
        queue.enqueue(element);
    }
    
    public Order peek() {
        return (Order)queue.peek();
    }
    
    /**
     * Legt ein neues Orderobjekt vom Typ Order an und fuegt dieses an das
     * Ende der Queue an.
     * 
     * @param orderID Die Bestellnummer. 
     * @param client Der Auftraggeber.
     * @throws OrderException 
     */
    public Order add(int orderID, String client) throws OrderException {
        Order newOrder = new Order(orderID, client); 
        queue.enqueue(newOrder); 
        return newOrder;
    }
    
    /**
     * Entfernt das letzte Objekt der Queue und gibt dieses zurueck.
     * 
     * @return Das <b>entfernte</b> Element der Queue.
     */
    public Order remove() {
        return (Order)queue.dequeue();
    }
    
    @Override
    public String toString() {
        return queue.toString();
    }
}
